//
//  SLTableVC.swift
//  sulit-loan
//
//  Created by 王刚锋 on 2025/4/5.
//  Copyright © 2025 coolBoy. All rights reserved.
//

import UIKit
import SwiftyJSON
import MJRefresh
import DZNEmptyDataSet

class SLTableVC<T>: SLBaseVC,UITableViewDelegate,UITableViewDataSource{

    
    override func loginEventAction() {
        self.refreshData(isPullDown: true)
    }
    
    var outScrollView:UIScrollView?
    var block:SLBlock?
    var keyword:String = ""
    var page:Int = 1
    var pageSize:Int = 12
//    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//       return  DevConfig.heigth -  DevConfig.tab_height
//   }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 0.1
    }
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0.1
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return UIView()
    }
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datas.count
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        
    }
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return false
    }
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
        return cell
    }
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
    }

    var datas:[T] = []
    
    lazy var tableview: UITableView = {
        let pt = create_tableView(bgColor: .clear, supView: self.view, style: .grouped) { make in
            make.edges.equalTo(UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0))
        }
        pt.estimatedRowHeight = 0
//        pt.emptyDataSetSource = self
//        pt.emptyDataSetDelegate = self
        pt.delegate = self
        pt.dataSource = self
        return pt
    }()
    func configAutoHeight(estimatedHeight:CGFloat = 80,autoPullDown:Bool = true,allowPull:Bool = true,backgroundColor:UIColor = .clear,refresh:Bool = true,nibName:String = "") -> Void {
        self.tableview.rowHeight = UITableView.automaticDimension
        self.tableview.estimatedRowHeight = estimatedHeight
        self.tableview.backgroundColor = backgroundColor
        if !nibName.isEmpty{
            self.tableview.register(UINib(nibName: nibName, bundle: nil), forCellReuseIdentifier: nibName)
        }
        if(allowPull == false){
            self.tableview.mj_header = nil
            self.tableview.mj_footer = nil
            return
        }
        if refresh{
            self.tableview.mj_header?.beginRefreshing()
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableview.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
        
        self.tableview.mj_header = MJRefreshNormalHeader(refreshingBlock: {
            self.refreshAction()
        })
        let footer  = MJRefreshAutoNormalFooter(refreshingBlock: {
            self.refreshMoreAction()
        })
        footer.setTitle("", for: MJRefreshState.noMoreData);

        self.tableview.mj_footer = footer
    }
    @objc func loginRefreshPageAction() -> Void {
        self.refreshAction()
    }
    func refreshAction() -> Void {
        self.page = 1
        self.refreshData(isPullDown: true)
    }
    
    func refreshMoreAction() -> Void {
        self.refreshData(isPullDown: false)
    }
    func refreshData(isPullDown:Bool = true) -> Void {
        self.tableview.mj_footer?.endRefreshing()
        self.tableview.mj_header?.endRefreshing()
    }
    func autoAdd(responseCall:JSON,total:Int,block:SLBlock,isPullRefresh:Bool = false) -> Void {
        if(isPullRefresh){
            self.datas.removeAll()
        }
        var count = 0
        for  (_,subJson):( String ,  JSON )  in  responseCall {
            block(subJson)
            count += 1
        }
        if total > self.datas.count{
            self.page += 1
            self.tableview.mj_footer?.resetNoMoreData()
        }else{
            self.tableview.mj_footer?.endRefreshingWithNoMoreData()
        }
    }
    
}
